Computer networks are ubiquitous to today's computer usage. Increases in processor speeds, memory, storage, and network bandwidth technologies have resulted in the build-out and deployment of networks with ever increasing capacities. More recently, the introduction of cloud-based services, such as those provided by Amazon (e.g., Amazon Elastic Compute Cloud (EC2) and Simple Storage Service (S3)) and Microsoft (e.g., Azure and Office 365) has resulted in additional network build-out for public network infrastructure, and addition to the deployment of massive data centers to support these services which employ private network infrastructure. Additionally, the new generation (i.e., 4G) of mobile network data services is expected to significantly impact the utilization of both wireless and land-line networks in the near future. The result of these and other considerations is that the utilization of computer networks is expected to continue to grow at a high rate for the foreseeable future.
In general, network traffic can be broadly categorized into two categories: reliable data traffic and best-effort traffic. For transmission of reliable data traffic, techniques are employed to ensure that the data received at a destination endpoint is the same as the data sent from a source endpoint—in other words, techniques are employed to ensure reliable delivery of the original data to the destination. Examples of this type of traffic include transmission of data files and the like. For best-effort traffic, packets are forwarded using techniques that emphasize delivery speed over reliability. Examples of best-effort traffic include streaming multimedia content and Voice over Internet (VoIP) traffic.
The most common technique for supporting reliable data traffic employs the Transmission Control Protocol (TCP). TCP is the protocol used by major Internet applications such as the World Wide Web, email, remote administration and file transfer. It is also used for reliable data delivery on all sizes of networks ranging from private LANs to enterprise WANs to the Internet itself.
TCP is one of the core protocols of the IP (Internet Protocol) Suite, and is implemented in combination with IP using a network “stack” at each TCP connection endpoint. More particularly, a TCP connection is typically managed by an operating system through a programming interface that represents the local end-point for communications, the Internet socket (also referred to as a TCP socket). TCP supports reliable transmission of data through the combined use of sequence numbers in the TCP segment headers and ACKnowledgement schemes. When transmitting data, such as a file, the TCP socket component segments the data into chunks and adds a TCP header, creating a TCP segment. The TCP segment is then encapsulated into an IP datagram. The IP datagrams including TCP segments are informally called IP packets or simply packets, and this terminology is used herein, noting that under the IP standard (RFC 791) a segment refers to a TCP Protocol Data Unit (PDU) to the IP PDU and frame to the data link layer PDU.
Conventional uses of TCP are shown in FIG. 1, which includes a source computer 100 connected to a destination computer 102 via an IP network 104 including a plurality of nodes comprising network elements (e.g., switches 1-20) connected via links 106. For illustrative purposes, one-way communication between source computer 100 and destination computer 102 is depicted, with the recognition that communication between these computers would be bi-directional. Source computer 100 and destination computer 102 operate as TCP endpoints, and each includes a network stack including a TCP socket and an IP Stack. This is depicted by a source a TCP socket 108, and an IP stack 110 implemented on source computer 100 and a destination TCP socket 112 and IP stack 114 implemented on destination computer 102.
After a TCP connection is established between source computer 100 and destination computer 102, the source computer begins to stream packets 1-7 sequentially toward destination computer 102 via IP network 104. The switches and routers in an IP network are configured to forward packets using routing/forwarding tables that forward traffic based on packet classification data, wherein a baseline level of forwarding is typically based at least on the destination IP address in the packet header (which in this example corresponds to the address of destination computer 102). Packet forwarding is done using a hop-by-hop routed path, an example of which is depicted as a path 116 via nodes 1-2-4-5-6-7-8. An alternative path 118 is depicted via nodes 1-9-10-11-12-13-14-8.
The current TCP protocol facilitates reliable transmission by primarily using a cumulative acknowledgement scheme, where the receiver sends an acknowledgement (ACK) signifying that it has received all data preceding the acknowledged sequence number without error. A retransmission timeout timer is associated with each packet that is transmitted from a source, and source TCP socket 108 employs a timeout timer 120 to determine when to retransmit packets for which ACKs have not been received within the timeout period for those packets. Under another scheme, in response to receiving an out-of-order packet TCP receivers may send Selective ACKnowledgements (SACK) or a Double ACK to request retransmission of a packet.
During network transmission, packet drops may occur for various reasons, such a for bit errors or if a switch has inadequate buffer space due to local network congestion. An example of a packet drop for packet 4 shown by an X at switch 5 in FIG. 1. In the event of a packet drop, the timer-based ACK approach creates a long delay before a packet is retransmitted. Under an out-of-order condition, retransmission requests should wait to see if the out-of-order packet has been rerouted along a different path than other packets in the flow, causing a delay in delivery. Thus, retransmission is not immediately requested. Under both approaches, a packet drop causes a long latency prior to retransmission, reducing the effective bandwidth of the link.